﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FirmaKurierska.Models;
using FirmaKurierska.Areas.Admin.Models;
using FirmaKurierska.Filters;
using System.Web.Security;

namespace FirmaKurierska.Controllers
{
    [InitializeSimpleMembership]
    public class KlientController : Controller
    {
        /// <summary>
        /// Wyświetla panel do zamawiania nowe przesyłki
        /// </summary>
        /// <returns>Panel zamówienia</returns>
        [Authorize(Roles = "Klient")]
        public ActionResult ZamowPrzesylke()
        {
            return View();
        }

        /// <summary>
        /// Dodaje nową przesyłkę do zamówień
        /// </summary>
        /// <param name="przes">Model przesyłki</param>
        /// <returns>Podsumowanie zamówienia</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ZamowPrzesylke(Przesylka przes)
        {
            string uzytkownik = User.Identity.Name;
            var dbContext = new UsersContext();
            var users = dbContext.UserProfiles.ToList();

            //zalogowany uzytkownik
            var user = (from n in users where n.UserName.Equals(uzytkownik) select n).Single();

            //Połączenie z odpowiednia baza
            var dBCentrale = new PlacowkaEntities();
            var listaCentrali = dBCentrale.Centrale.ToList();
            var centralaId = user.CentralaId;
            string nazwaCentrali = listaCentrali[centralaId].Nazwa;
            var dB = new PlacowkaEntities();
            Adresat adresat = new Adresat();
            adresat.imie = przes.Imie;
            adresat.nazwisko = przes.Nazwisko;
            adresat.miasto = przes.Miasto;
            adresat.nr_domu = przes.NumerDomu;
            adresat.ulica = przes.Ulica;
            adresat.nr_tel = przes.nrTelefonu;
            dB.Adresat.Add(adresat);
            dB.SaveChanges();

            int idAdresata = adresat.aid;
            Paczka paczka = new Paczka();
            paczka.waga = przes.Waga;
            paczka.data_nadania = DateTime.Now;
            paczka.kierowca_id = null;
            paczka.adresat_id = idAdresata;
            paczka.nadawca_id = user.UserId;
            paczka.centrala_id = centralaId;
            int numerZam = paczka.pid;
            dB.Paczka.Add(paczka);
            dB.SaveChanges();

            return RedirectToAction("PodsumowanieZamowienia", new { numerZamowienia = paczka.pid });
        }

        /// <summary>
        /// Wyświetla informację o nowym zamówieniu
        /// </summary>
        /// <param name="numerZamowienia">Id zamówienia</param>
        /// <returns>Szczegóły zamówienia</returns>
        [HttpGet]
        public ActionResult PodsumowanieZamowienia(string numerZamowienia)
        {
            ViewBag.Numer = numerZamowienia;
            return View();
        }

        /// <summary>
        /// Wyświetla panel do sprawdzania statusu przesyłki
        /// </summary>
        /// <returns>Widok panelu</returns>
        public ActionResult SprawdzPrzesylke()
        {
            ViewBag.Message = "Sprawdz przesyłkę";
            return View();
        }

        /// <summary>
        /// Pozwala na sprawdzenie statusu przesyłki
        /// </summary>
        /// <param name="formularz">Formularz przesyłki</param>
        /// <returns>Informacje o przesyłce</returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult SprawdzPrzesylke(FormCollection formularz)
        {
            Lokalizacja lok = new Lokalizacja();
            try
            {
                lok = Lokalizacja.lokalizujPrzesylke(Convert.ToInt64(formularz[0].ToString()));
            }
            catch (Exception)
            {
                ViewData["miejsce"] = "Nie odnaleziono przesyłki o numerze: " + formularz[0].ToString();
                ViewData["czas"] = "";
                ViewData["nadanie"] = "";
            }
            if (lok.Istnieje == true)
            {
                ViewData["nadanie"] = "Przesyłka o numerze: " + formularz[0].ToString() + " z: " + lok.MiejsceNadania + " do: " + lok.MiejsceDostarczenia;
                ViewData["dostarczenie"] = "Aktualnie znajduję się w: " + lok.Miejsce;
                ViewData["czas"] = "Planowany czas dostarczenia:  " + lok.CzasDostarczenia;
                ViewData["lat"] = lok.Lat;
                ViewData["lng"] = lok.Lng;

            }
            else if (lok.Istnieje == false)
            {
                ViewData["nadanie"] = "Przesyłka o numerze: " + formularz[0].ToString();
                ViewData["dostarczenie"] = "Nie odnaleziono przesyłki";
            }
            else
            {
                ViewData["miejsce"] = "Nieprawidłowy numer przesyłki! ";
                ViewData["czas"] = "";
                ViewData["nadanie"] = "";
            }

            return View();
        }

    }
}
